home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / iritsm3s.zip / FREEFORM.IRT < prev    next >
Text File  |  1991-12-02  |  11KB  |  381 lines

  1. #
  2. # Some routines to test surface/curve operators
  3. #
  4.  
  5. #
  6. # Set display to on to view some results, off to view nothing.
  7. #
  8. display = on;
  9.  
  10. #
  11. # Control the surface to polygons subdivison resolution, and isolines gen.
  12. #
  13. save_res = resolution;
  14. resolution = 20;
  15. if ( machine, "=", msdos, (resolution = 5));
  16. drawctlpt = red;
  17.  
  18. #
  19. # Circular constructors
  20. #
  21.  
  22. circ = circle( vector( 0.25, 0.5, 0.5 ), 1.5 );
  23. arc1 = arc( vector( 0.0, 0.0, 0.0 ),
  24.         vector( 0.5, 2.0, 0.0 ),
  25.         vector( 1.0, 0.0, 0.0 ) );
  26. arc2 = arc( vector( 0.0, 0.0, 0.0 ),
  27.         vector( 0.0, 2.0, 0.5 ),
  28.         vector( 0.0, 0.0, 1.0 ) );
  29.  
  30. if ( display, "=", on, interact( list( axes, circ, arc1, arc2 ), 0 ) );
  31.  
  32. #
  33. # Piecewise linear approximation to a curve using ceval:
  34. #
  35. cb = ceval( circ, 0.0 );
  36. cb_all = list( cb );
  37. for ( (t = 0.2), 0.2, 4.0,
  38.     (
  39.        (cb = ceval( circ, t ) ):
  40.        snoc( cb, cb_all )
  41.     )
  42.     );
  43. cb_crv = cbspline( 2, cb_all, list( KV_OPEN ) );
  44. color( cb_crv, yellow );
  45. if ( display, "=", on, interact( list( cb_crv, circ, axes ), 0 ) );
  46. free( cb_crv ); free( cb_all ); free( cb );
  47.  
  48. #
  49. # Ruled surface constructor examples.
  50. #
  51. arc3 = arc( vector( 0.0,  0.0, 1.0 ),
  52.         vector( 0.5, -0.2, 1.0 ),
  53.         vector( 1.0,  0.0, 1.0 ) );
  54. ruled = ruledsrf( arc3,
  55.           ctlpt( E2, 0.0, 0.0 ) + ctlpt( E2, 1.0, 0.0 ) );
  56. if ( display, "=", on, interact( list( axes, ruled ), 0 ) );
  57. free( ruled );
  58.  
  59. circ = circle( vector( 0.0, 0.0, 0.0 ), 0.25 );
  60. cyl = ruledsrf( circ, circ*trans( vector( 0.0, 0.0, 1.0 ) ) );
  61. if ( display, "=", on, interact( list( axes, cyl ), 0 ) );
  62. free( cyl );
  63.  
  64. skewcyl = ruledsrf( circ, circ*trans( vector( 0.2, 0.0, 1.0 ) ) );
  65. if ( display, "=", on, interact( list( axes, skewcyl ), 0 ) );
  66. free( skewcyl );
  67.  
  68. skew2cyl = ruledsrf( circ*rotx( 20 ),
  69.              circ*rotx( -20 )* trans( vector( 0.0, 0.0, 1.0 ) ) );
  70. if ( display, "=", on, interact( list( axes, skew2cyl ), 0 ) );
  71. free( skew2cyl );
  72.  
  73. drawctlpt = 0;
  74. free( arc1 ); free( arc2 ); free( arc3 ); free( circ );
  75.  
  76. #
  77. # Curve constructors.
  78. #
  79. crv1 = ctlpt( E3, 0.5, 0.0, 1.0 ) +
  80.        ctlpt( E3, 0.5, 0.0, 1.2 ) +
  81.        ctlpt( E3, 1.0, 0.0, 1.2 );
  82. crv2 = crv1 +
  83.        arc( vector( 1.0,  0.0, 0.75 ),
  84.         vector( 0.75, 0.0, 0.7 ),
  85.         vector( 0.5,  0.0, 0.85 ) ) +
  86.        arc( vector( 0.5,  0.0, 0.75 ),
  87.         vector( 0.75, 0.0, 0.8 ),
  88.         vector( 1.0,  0.0, 0.65 ) );
  89. crv3 = crv2 +
  90.        crv2 * trans( vector( -0.5, 0.15, -0.5 ) ) +
  91.        crv2 * trans( vector( -1.0, 0.3,  -1.0 ) );
  92. resolution = 60;
  93. if ( display, "=", on, interact( list( axes, crv3 ), 0 ) );
  94. resolution = 20;
  95. if ( machine, "=", msdos, (resolution = 5));
  96. free( crv1 ); free( crv2 ); free( crv3 );
  97.  
  98. cross = arc( vector( 0.2, 0.0, 0.0 ),
  99.          vector( 0.2, 0.2, 0.0 ),
  100.          vector( 0.0, 0.2, 0.0 ) ) +
  101.     arc( vector( 0.0, 0.4, 0.0 ),
  102.          vector( 0.1, 0.4, 0.0 ),
  103.          vector( 0.1, 0.5, 0.0 ) ) +
  104.     arc( vector( 0.8, 0.5, 0.0 ),
  105.          vector( 0.8, 0.3, 0.0 ),
  106.          vector( 1.0, 0.3, 0.0 ) ) +
  107.     arc( vector( 1.0, 0.1, 0.0 ),
  108.          vector( 0.9, 0.1, 0.0 ),
  109.          vector( 0.9, 0.0, 0.0 ) ) +
  110.     ctlpt( E2, 0.2, 0.0 );
  111. if ( display, "=", on, interact( list( axes, cross ), 0 ) );
  112.  
  113. #
  114. # Direct control points manipulation.
  115. #
  116. cb = cbezier( list( ctlpt( E3, -1, 0, 0 ),
  117.             ctlpt( E3,  0, 0, 0 ),
  118.             ctlpt( E3,  1, 0, 0 ) ) );
  119.  
  120. cb1 = 0; # Define a dummy variable to use in loop.
  121. cb_all = list( axes );
  122. for ( (z = -0.9), 0.3, 0.9,
  123.     (
  124.        (cb1 = ceditpt( cb, ctlpt( E3, 0, 0, z ), 1 )):
  125.        color( cb1, green ):
  126.        snoc( cb1, cb_all )
  127.     )
  128.     );
  129. if ( display, "=", on, interact( cb_all, 0 ) );
  130. free( cb_all ); free( cb ); free( cb1 );
  131.  
  132.  
  133. sb = ruledSrf( cbezier( list( ctlpt( E3, -0.5, -0.5, 0.0 ),
  134.                   ctlpt( E3,  0.5, -0.5, 0.0 ) ) ),
  135.            cbezier( list( ctlpt( E3, -0.5,  0.5, 0.0 ),
  136.                   ctlpt( E3,  0.5,  0.5, 0.0 ) ) ) );
  137. sb = sraise( sraise( sb, row, 3 ),
  138.          col, 3 );
  139. sb = srefine( srefine( sb, row, false, list( 0.333, 0.667 ) ),
  140.           col, false, list( 0.333, 0.667 ) );
  141. sb1 = 0; # Define a dummy variable to use in loop.
  142. sb_all = list( axes );
  143. for ( (z = -0.9), 0.6, 0.9,
  144.     (
  145.        (sb1 = seditpt( sb, ctlpt( E3, 0, 0, z ), 2, 2 )):
  146.        color( sb1, green ):
  147.        snoc( sb1, sb_all )
  148.     )
  149.     );
  150. if ( display, "=", on, interact( sb_all, 0 ) );
  151. free( sb_all ); free( sb ); free( sb1 );
  152.  
  153. #
  154. # Curve order raise:
  155. #
  156. cb = cbezier( list( ctlpt( E2, -1, 0 ),
  157.             ctlpt( E2,  0, 2 ),
  158.             ctlpt( E2,  1, 0 ) ) );
  159.  
  160. cb1 = 0; # Define a dummy variable to use in loop.
  161. cb_all = list( axes, cb );
  162. for ( (o = 4), 1, 8,
  163.     (
  164.        (cb1 = craise( cb, o )):
  165.        color( cb1, green ):
  166.        snoc( cb1, cb_all )
  167.     )
  168.     );
  169. if ( display, "=", on, interact( cb_all, 0 ) );
  170. free( cb_all ); free( cb ); free( cb1 );
  171.  
  172. #
  173. # Extrusion examples.
  174. #
  175. cbzr = cbezier( list( ctlpt( E2, 0.0, 0.0 ),
  176.               ctlpt( E2, 1.0, 0.0 ),
  177.               ctlpt( E2, 1.0, 1.0 ) ) );
  178. color( cbzr, white );
  179.  
  180. s = extrude( cbzr, vector( 0.0, 0.0, 1.0 ) );
  181.  
  182. if ( display, "=", on, interact( list( axes, s, cbzr ), 0 ) );
  183. free( cbzr ); free( s );
  184.  
  185. s = extrude( cross, vector( 0.0, 0.0, 1.0 ) );
  186. if ( display, "=", on, interact( list( axes, s ), 0 ) );
  187.  
  188. s = extrude( cross, vector( 0.1, 0.2, 1.0 ) );
  189. if ( display, "=", on, interact( list( axes, s ), 0 ) );
  190.  
  191. resolution = 10;
  192. ps = gpolygon( s );
  193. if ( display, "=", on, interact( list( axes, ps ), 0 ) );
  194. free( ps );
  195. free( s );
  196. resolution = 20;
  197. if ( machine, "=", msdos, (resolution = 5));
  198.  
  199. #
  200. # Srf of revolution examples
  201. #
  202.  
  203. cbzr = cbezier( list( ctlpt( E3, 0.0, 0.0, 0.0 ),
  204.               ctlpt( E3, 1.0, 0.0, 0.0 ),
  205.               ctlpt( E3, 1.0, 0.0, 1.0 ) ) );
  206. color( cbzr, white );
  207.  
  208. sb = surfrev( cbzr );
  209.  
  210. interact( list( sb, cbzr ), 0 );
  211.  
  212. s45 = sin(pi / 4 );
  213. halfcirc = cbspline( 3,
  214.              list( ctlpt( P3, 1.0,  0.0, 0.0,  1.0 ),
  215.                    ctlpt( P3, s45, -s45, 0.0,  s45 ),
  216.                    ctlpt( P3, 1.0, -1.0, 0.0,  0.0 ),
  217.                    ctlpt( P3, s45, -s45, 0.0, -s45 ),
  218.                ctlpt( P3, 1.0,  0.0, 0.0, -1.0 ) ),
  219.              list( 0, 0, 0, 1, 1, 2, 2, 2 ) );
  220. color( halfcirc, white );
  221.  
  222. sp = surfrev( halfcirc );
  223.  
  224. interact( list( sp, halfcirc ), 0 );
  225.  
  226. gcross = cbspline( 3,
  227.            list( ctlpt( E3, 0.3, 0.0, 0.0 ),
  228.                  ctlpt( E3, 0.3, 0.0, 0.05 ),
  229.                  ctlpt( E3, 0.1, 0.0, 0.05 ),
  230.                  ctlpt( E3, 0.1, 0.0, 0.4 ),
  231.                  ctlpt( E3, 0.5, 0.0, 0.4 ),
  232.                  ctlpt( E3, 0.6, 0.0, 0.8 ) ),
  233.            list( 0, 0, 0, 1, 2, 3, 4, 4, 4 ) );
  234. color( gcross, white );
  235. glass = surfrev( gcross );
  236. interact(list(axes, glass, gcross), 0);
  237.  
  238. #
  239. # Sweep examples.
  240. #
  241.  
  242. arc1 = arc( vector( 1.0, 0.0, 0.0 ),
  243.         vector( 0.0, 0.0, 0.0 ),
  244.         vector( 0.0, 1.0, 0.0 ) );
  245. s = sweepsrf( cross, arc1,  0.2 );
  246. if ( display, "=", on, interact( list( axes, s ), 0 ) );
  247.  
  248. arc1 = arc( vector( -1.0, 0.0, 0.0 ),
  249.         vector( 0.0, 0.0, 0.1 ),
  250.         vector( 1.0, 0.0, 0.0 ) );
  251. arc1 = crefine( arc1, false, list( 0.25, 0.5, 0.75 ) );
  252. scalecrv = cbezier( list( ctlpt( E2, 0.0, 0.1 ),
  253.                          ctlpt( E2, 1.0, 0.5 ),
  254.                          ctlpt( E2, 2.0, 0.1 ) ) );
  255. s = sweepsrf( cross, arc1, scalecrv );
  256. if ( display, "=", on, interact( list( axes, s ), 0 ) );
  257.  
  258. circ = circle( vector( 0.0, 0.0, 0.0 ), 1.0 );
  259.  
  260. s = sweepsrf( circ, circ, 0.25 );
  261. if ( display, "=", on, interact( list( axes, s ), 0 ) );
  262.  
  263. resolution = 10;
  264. ps = gpolygon( s );
  265. if ( display, "=", on, interact( list( axes, ps ), 0 ) );
  266. free( ps );
  267. resolution = 20;
  268. if ( machine, "=", msdos, (resolution = 5));
  269.  
  270. s = sweepsrf( circ, circ, scalecrv );
  271. if ( display, "=", on, interact( list( axes, s ), 0 ) );
  272.  
  273. free( cross );
  274. free( circ );
  275. free( arc1 );
  276.  
  277. #
  278. # Boolean sum examples.
  279. #
  280. cbzr1 = cbezier( list( ctlpt( E3, -0.2,  0.1,  0.5 ),
  281.                ctlpt( E3,  0.0,  0.5,  1.0 ),
  282.                ctlpt( E3,  0.1,  1.0, -0.2 ) ) );
  283. cbzr2 = cbezier( list( ctlpt( E3,  1.0,  0.0, -0.3 ),
  284.                ctlpt( E3,  0.8,  0.5, -1.0 ),
  285.                ctlpt( E3,  1.0,  1.0,  0.2 ) ) );
  286. cbzr3 = cbezier( list( ctlpt( E3, -0.2,  0.1,  0.5 ),
  287.                ctlpt( E3,  0.5,  0.0, -1.0 ),
  288.                ctlpt( E3,  1.0,  0.0, -0.3 ) ) );
  289. cbzr4 = cbezier( list( ctlpt( E3,  0.1,  1.0, -0.2 ),
  290.                ctlpt( E3,  0.5,  1.0,  1.0 ),
  291.                ctlpt( E3,  1.0,  1.0,  0.2 ) ) );
  292.  
  293. s = boolsum( cbzr1, cbzr2, cbzr3, cbzr4 );
  294. color(s, green);
  295. if ( display, "=", on, interact( list( axes, s, cbzr1, cbzr2, cbzr3, cbzr4 ), 0 ) );
  296.  
  297. cbzr1 = cbezier( list( ctlpt( E3, -0.1,  0.1,  0.2 ),
  298.                ctlpt( E3,  0.0,  0.5,  1.0 ),
  299.                ctlpt( E3,  0.1,  1.0,  0.2 ) ) );
  300. cbzr2 = cbezier( list( ctlpt( E3,  1.0,  0.2, -0.1 ),
  301.                ctlpt( E3,  1.0,  0.5, -1.0 ),
  302.                ctlpt( E3,  1.1,  1.1,  0.1 ) ) );
  303. cbzr3 = cbezier( list( ctlpt( E3, -0.1,  0.1,  0.2 ),
  304.                ctlpt( E3,  0.2,  0.1, -1.0 ),
  305.                ctlpt( E3,  0.4,  0.0,  2.0 ),
  306.                ctlpt( E3,  0.5, -0.1, -1.0 ),
  307.                ctlpt( E3,  1.0,  0.2, -0.1 ) ) );
  308. cbzr4 = cbezier( list( ctlpt( E3,  0.1,  1.0,  0.2 ),
  309.                ctlpt( E3,  0.5,  0.8,  1.0 ),
  310.                ctlpt( E3,  0.7,  0.9, -2.0 ),
  311.                ctlpt( E3,  0.8,  1.0,  1.0 ),
  312.                ctlpt( E3,  1.1,  1.1,  0.1 ) ) );
  313. s = boolsum( cbzr1, cbzr2, cbzr3, cbzr4 );
  314. color(s, green);
  315. if ( display, "=", on, interact( list( axes, s, cbzr1, cbzr2, cbzr3, cbzr4 ), 0 ) );
  316.  
  317. cbzr1 = cbezier( list( ctlpt( E3, 0.1, 0.1, 0.1 ),
  318.                ctlpt( E3, 0.0, 0.5, 1.0 ),
  319.                ctlpt( E3, 0.4, 1.0, 0.4 ) ) );
  320. cbzr2 = cbezier( list( ctlpt( E3, 1.0, 0.2, 0.2 ),
  321.                ctlpt( E3, 1.0, 0.5, -1.0 ),
  322.                ctlpt( E3, 1.0, 1.0, 0.3 ) ) );
  323. cbsp3 = cbspline( 4,
  324.           list( ctlpt( E3, 0.1,  0.1, 0.1 ),
  325.                 ctlpt( E3, 0.25, 0.0, -1.0 ),
  326.                 ctlpt( E3, 0.5,  0.0, 2.0 ),
  327.                 ctlpt( E3, 0.75, 0.0, -1.0 ),
  328.                 ctlpt( E3, 1.0,  0.2, 0.2 ) ),
  329.           list( KV_OPEN ) );
  330. cbsp4 = cbspline( 4,
  331.           list( ctlpt( E3, 0.4,  1.0, 0.4 ),
  332.                 ctlpt( E3, 0.25, 1.0, 1.0 ),
  333.                 ctlpt( E3, 0.5,  1.0, -2.0 ),
  334.                 ctlpt( E3, 0.75, 1.0, 1.0 ),
  335.                 ctlpt( E3, 1.0,  1.0, 0.3 ) ),
  336.           list( KV_OPEN ) );
  337.  
  338. s = boolsum( cbzr1, cbzr2, cbsp3, cbsp4 );
  339. color(s, green);
  340. if ( display, "=", on, interact( list( axes, s, cbzr1, cbzr2, cbsp3, cbsp4 ), 0 ) );
  341.  
  342. free( cbzr1 ); free( cbzr2 ); free( cbzr3 ); free( cbzr4 );
  343. free( cbsp1 ); free( cbsp2 );
  344.  
  345. #
  346. # Surface from curves constructor.
  347. #
  348.  
  349. c1 = cbspline( 3,
  350.            list( ctlpt( E3, 0.0, 0.0, 0.0 ),
  351.              ctlpt( E3, 1.0, 0.0, 0.0 ),
  352.              ctlpt( E3, 1.0, 1.0, 0.0 ) ),
  353.            list( KV_OPEN ) );
  354. c2 = cbspline( 3,
  355.            list( ctlpt( E3, 0.0, 0.0, 1.0 ),
  356.              ctlpt( E3, 1.0, 0.0, 1.0 ),
  357.              ctlpt( E3, 1.0, 2.0, 1.0 ) ),
  358.            list( KV_OPEN ) );
  359. c3 = cbspline( 3,
  360.            list( ctlpt( E3, 0.0, 0.0, 1.5 ),
  361.              ctlpt( E3, 2.0, 0.0, 1.5 ),
  362.              ctlpt( E3, 1.0, 0.5, 1.5 ),
  363.              ctlpt( E3, 1.0, 1.0, 1.5 ) ),
  364.            list( KV_OPEN ) );
  365. c4 = cbspline( 3,
  366.            list( ctlpt( E3, 0.0, 0.0, 2.5 ),
  367.              ctlpt( E3, 1.0, 0.0, 2.5 ),
  368.              ctlpt( E3, 1.0, 1.0, 2.5 ) ),
  369.            list( KV_OPEN ) );
  370.  
  371. s = sfromcrvs( list( c1, c2, c3, c4 ) );
  372. color( s, green );
  373. interact( list( s ), 0 );
  374. free( c1 ); free( c2 ); free( c3 ); free( c4 );
  375.  
  376. display = off;
  377.  
  378. resolution = save_res;
  379. drawctlpt = 0;
  380.  
  381.